package lv.servidordisqueria.domain;

import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.Table;

import lv.mensajeriadisqueria.idomain.IGrupo;
import lv.mensajeriadisqueria.idomain.IMusico;

/**
 * Es la clase con cual se mapea con la tabla MUSICO de la
 * base de datos
 */
@Entity
@Table(name = "MUSICO")
@Inheritance(strategy = InheritanceType.JOINED)
public class Musico extends Domain implements IMusico {
	
	/**
	 * 
	 */
	private static final long serialVersionUID = -1108992118819132444L;
	
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	@Column(name = "ID_MUSICO")
	private Integer idMusico;
	
	@Column(name="NOMBRE")
	private String nombre;
				  
	@Column(name="NACIONALIDAD")
	private String nacionalidad;
	
	@Column(name="VIVO")
	private Boolean vivo;

	@ManyToMany(targetEntity = Grupo.class, 
			cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH})
	@JoinTable(name="RELACION_MUSICO_GRUPO", joinColumns=@JoinColumn(name="ID_MUSICO"),
			inverseJoinColumns=@JoinColumn(name="ID_GRUPO"))
	private List<IGrupo> grupos;

	public Musico(){}
	
	public Musico(String nombre, String nacionalidad, Boolean vivo) {
		super();
		this.nombre = nombre;
		this.nacionalidad = nacionalidad;
		this.vivo = vivo;
	}

	public String getNombre() {
		return nombre;
	}

	public void setNombre(String nombre) {
		this.nombre = nombre;
	}

	public String getNacionalidad() {
		return nacionalidad;
	}

	public void setNacionalidad(String nacionalidad) {
		this.nacionalidad = nacionalidad;
	}

	public Boolean getVivo() {
		return vivo;
	}

	public void setVivo(Boolean vivo) {
		this.vivo = vivo;
	}
	
	public List<IGrupo> getGrupos() {
		return grupos;
	}
	
	public void setGrupos(List<IGrupo> grupos) {
		this.grupos = grupos;
	}

	@Override
	public Integer getIdMusico() {
		return idMusico;
	}

	@Override
	public void setIdMusico(Integer idMusico) {
		this.idMusico = idMusico;
	}
}